package com.ftg.learn.rbac.service.impl;

import com.ftg.learn.rbac.entity.Role;
import com.ftg.learn.rbac.entity.User;
import com.ftg.learn.rbac.mapper.RoleMapper;
import com.ftg.learn.rbac.mapper.UserMapper;
import com.ftg.learn.rbac.service.IRoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Objects;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author kangjx
 * @since 2022-03-23
 */
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {

    @Autowired
    UserMapper iusermapp;

    @Override
    public boolean updateIce(int id, int num) {
        return super.baseMapper.updateForUstatus(id,num) >0 ? true : false;
    }

    @Override
    public List<String> showRoleIdForUid(String uid) {
        return super.baseMapper.showRoleIdForUid(uid);
    }

    /**
     * Transactional 这个叫事务,表示当前注解修饰的方法 开启事务
     *    事务 ： 多个sql操作在一个组当中
     *       物点 ： 要么都成功  要么都失几
     *       ACID  原子性  一致性  分离性  持久性
     * @param uid
     * @param rids
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Boolean userForRole(int uid, List<String> rids) {
        //先查询 一下uid是否存在，存在赋值
        User user =  iusermapp.selectById(uid);
        if(!Objects.isNull(user)){
            //删除中间表里当前是用户的全部角色 信息
            super.baseMapper.deleteUserRole(uid);

            //重新添加中间表里面的全部角色
            for (int i = 0; i < rids.size(); i++) {
                super.baseMapper.saveUserRole(uid,rids.get(i));
            }
            return true;
        }
        return false;
    }
}
